package main

import (
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/testdata/protoexample"
)

func main() {
	r := gin.Default()

	// 方式1、 json
	r.GET("/someJSON", func(context *gin.Context) {
		context.JSON(200, gin.H{"message": "someJSON", "status": 200})
	})
	// 测试: http://localhost:8000/someJSON

	// 方式2、结构体响应
	r.GET("/someStruct", func(context *gin.Context) {
		var msg struct {
			Name    string
			Message string
			Number  int
		}
		msg.Name = "root"
		msg.Message = "message"
		msg.Number = 123

		context.JSON(200, msg)
	})
	// 测试: http://localhost:8000/someStruct

	// 方式3、 xml格式
	r.GET("/someXML", func(context *gin.Context) {
		context.XML(200, gin.H{"message": "abc"})
	})
	// 测试: http://localhost:8000/someXML

	// 方式4、YAML响应
	r.GET("/someYAML", func(context *gin.Context) {
		context.YAML(200, gin.H{"name": "zhangsan"})
	})
	// 测试: http://localhost:8000/someYAML  yaml是高效模式,会下载到一个文件

	// 方式5、protoBuf 格式,谷歌开发的高效率存储读取的工具
	r.GET("/someProtoBuf", func(context *gin.Context) {
		// 定义数据
		reps := []int64{int64(1), int64(2)}
		label := "label"
		// 传protobuf格式数据
		data := &protoexample.Test{
			Label: &label,
			Reps:  reps,
		}

		context.ProtoBuf(200, data)
	})
	// http://localhost:8000/someProtoBuf  也是高效模式,下载到一个文件

	r.Run(":8000")
}
